package Formularios;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JMenu;
import javax.swing.JOptionPane;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.util.Rotation;

import es.jpascu.graficos.PieChart;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.IOException;

import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.RowSpec;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;

public class frmPrincipal extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	
	static Statement comando;
	static Connection con;
	static int iEmpleado = cNemonicos._ERROR_;
	static String sEmpleado;
	
	static JPanel pGrafica1;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					final frmPrincipal frame = new frmPrincipal();
					frame.setLocationRelativeTo(null);
					
					//Login
					final frmLogin login = new frmLogin();
					login.setVisible(true);
					login.addWindowListener(new java.awt.event.WindowAdapter()   
				    {  
						public void windowClosed(WindowEvent e)    
				        {  
				          iEmpleado = login.getEmpleado();
				          sEmpleado = login.getNombreEmpleado();
				          
				          frame.setTitle(frame.getTitle() + "  [" + sEmpleado + "]" );
				          //ponerGraficos();
				          if ( iEmpleado != -1)
				          {
				        	  frame.setVisible(true);
				          }
				          else
				          {
				        	  System.exit(0);
				          }
				        }
				    }
					
					);	
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public frmPrincipal() {
		  
		addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent arg0) {
				if ( arg0.getKeyCode() == cNemonicos.VK_F5)
				{
					//Login
					final frmLogin login = new frmLogin();
					login.setVisible(true);
					login.addWindowListener(new java.awt.event.WindowAdapter()   
				    {  
						public void windowClosed(WindowEvent e)    
				        {  
				          iEmpleado = login.getEmpleado();
				          sEmpleado = login.getNombreEmpleado();
				          
				          setTitle("Rohen Clean " + sEmpleado + "]" );
				        }
				    }
					
					);	
				}
			}
		});
		setResizable(false);
		setTitle("Rohen Clean");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//setExtendedState( JFrame.MAXIMIZED_BOTH );
		setBounds(100, 100, 1183, 751);
		
		general gen = new general();
		try {
			comando = gen.abrirConexion(cNemonicos.IP_GLOBAL,1);
		} catch (ClassNotFoundException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		} catch (SQLException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		
		JMenu mnCatalogos = new JMenu("Catalogos");
		menuBar.add(mnCatalogos);
		
		JMenuItem mntmReactivos = new JMenuItem("Reactivos");
		mntmReactivos.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if ( general.consularPermiso(comando, iEmpleado, cNemonicos.ALTA_REACTIVOS) )
				{
					frmReactivos form = new frmReactivos();
					form.setVisible(true);
				}
				else
				{
					JOptionPane.showOptionDialog (null,"No tienes permisos para accesar a este modulo","Sin Permisos",JOptionPane.YES_OPTION,JOptionPane.ERROR_MESSAGE,null,new Object[] {"ACEPTAR"},"ACEPTAR");
				}				
			}
		});
		mnCatalogos.add(mntmReactivos);
		
		JMenuItem mntmProductos = new JMenuItem("Productos");
		mntmProductos.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if ( general.consularPermiso(comando, iEmpleado, cNemonicos.ALTA_PRODUCTOS) )
				{
					frmProductos form = new frmProductos();
					form.setVisible(true);
				}
				else
				{
					JOptionPane.showOptionDialog (null,"No tienes permisos para accesar a este modulo","Sin Permisos",JOptionPane.YES_OPTION,JOptionPane.ERROR_MESSAGE,null,new Object[] {"ACEPTAR"},"ACEPTAR");
				}			
			}
		});
		mnCatalogos.add(mntmProductos);
		
		JMenuItem mntmClientes = new JMenuItem("Clientes");
		mntmClientes.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
			          
				if ( general.consularPermiso(comando, iEmpleado, cNemonicos.ALTA_CLIENTES) )
				{
					frmClientes form = new frmClientes();
					form.setVisible(true);
				}
				else
				{
					JOptionPane.showOptionDialog (null,"No tienes permisos para accesar a este modulo","Sin Permisos",JOptionPane.YES_OPTION,JOptionPane.ERROR_MESSAGE,null,new Object[] {"ACEPTAR"},"ACEPTAR");
				}
			}
		});
		
		mnCatalogos.add(mntmClientes);
		
		JMenuItem mntmEmpleados = new JMenuItem("Empleados");
		mntmEmpleados.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
			          
				if ( general.consularPermiso(comando, iEmpleado, cNemonicos.ALTA_EMPLEADOS) )
				{
					frmEmpleados form = new frmEmpleados();
					form.setVisible(true);
				}
				else
				{
					JOptionPane.showOptionDialog (null,"No tienes permisos para accesar a este modulo","Sin Permisos",JOptionPane.YES_OPTION,JOptionPane.ERROR_MESSAGE,null,new Object[] {"ACEPTAR"},"ACEPTAR");
				}
			}
		});
		
		mnCatalogos.add(mntmEmpleados);
		
		
		JMenu mnEntradasSalidas = new JMenu("Entradas/Salidas");
		menuBar.add(mnEntradasSalidas);
		
		JMenuItem mntmEntradaProductos = new JMenuItem("Entrada de Productos");
		mntmEntradaProductos.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if ( general.consularPermiso(comando, iEmpleado, cNemonicos.ENTRADA_PROD) )
				{
					frmEntradaProductos form = new frmEntradaProductos();
					form.setVisible(true);
				}
				else
				{
					JOptionPane.showOptionDialog (null,"No tienes permisos para accesar a este modulo","Sin Permisos",JOptionPane.YES_OPTION,JOptionPane.ERROR_MESSAGE,null,new Object[] {"ACEPTAR"},"ACEPTAR");
				}			
			}
		});
		mnEntradasSalidas.add(mntmEntradaProductos);
		
		JMenuItem mntmEntradasReactivos = new JMenuItem("Entrada de Reactivos");
		mntmEntradasReactivos.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if ( general.consularPermiso(comando, iEmpleado, cNemonicos.ENTRADA_REAC) )
				{
					frmEntradas form = new frmEntradas();
					form.setVisible(true);
				}
				else
				{
					JOptionPane.showOptionDialog (null,"No tienes permisos para accesar a este modulo","Sin Permisos",JOptionPane.YES_OPTION,JOptionPane.ERROR_MESSAGE,null,new Object[] {"ACEPTAR"},"ACEPTAR");
				}				
			}
		});
		mnEntradasSalidas.add(mntmEntradasReactivos);
		
		JMenuItem mntmSalidasMP = new JMenuItem("Salida de Reactivos");
		mntmSalidasMP.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if ( general.consularPermiso(comando, iEmpleado, cNemonicos.SALIDA_REAC) )
				{
					frmSalidaMP form = new frmSalidaMP();
					form.setVisible(true);
				}
				else
				{
					JOptionPane.showOptionDialog (null,"No tienes permisos para accesar a este modulo","Sin Permisos",JOptionPane.YES_OPTION,JOptionPane.ERROR_MESSAGE,null,new Object[] {"ACEPTAR"},"ACEPTAR");
				}				
			}
		});
		mnEntradasSalidas.add(mntmSalidasMP);
		
		JMenu mnVentas = new JMenu("Ventas");
		menuBar.add(mnVentas);
		
		JMenuItem mntmVentas = new JMenuItem("Ventas");
		mntmVentas.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if ( general.consularPermiso(comando, iEmpleado, cNemonicos.VENTAS) )
				{
					frmVentas form = new frmVentas();
					form.setVisible(true);
				}
				else
				{
					JOptionPane.showOptionDialog (null,"No tienes permisos para accesar a este modulo","Sin Permisos",JOptionPane.YES_OPTION,JOptionPane.ERROR_MESSAGE,null,new Object[] {"ACEPTAR"},"ACEPTAR");
				}
			}
		});
		mnVentas.add(mntmVentas);		
		
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		
		pGrafica1 = new JPanel();
		// Creamos el conjunto de datos con las votaciones
		  PieDataset dataset = createDataset();
		 
		  JFreeChart chart = createChart(dataset, "Top 5 Productos Vendidos");
		  // Ponemos el gráfico en un panel
		  ChartPanel chartPanel = new ChartPanel(chart);
		  // Dejamos el tamaño por defecto
		  chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
		  // Lo añadimos a nuestra aplicación (PieChart)
		  //setContentPane(chartPanel);
		
		  pGrafica1.add(chartPanel);
		  
		  
		
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane.setHorizontalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addContainerGap()
					.addComponent(pGrafica1, GroupLayout.PREFERRED_SIZE, 522, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(637, Short.MAX_VALUE))
		);
		gl_contentPane.setVerticalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addContainerGap()
					.addComponent(pGrafica1, GroupLayout.PREFERRED_SIZE, 348, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(327, Short.MAX_VALUE))
		);
		contentPane.setLayout(gl_contentPane);
		
		/*
		JOptionPane.showMessageDialog( frmPrincipal.this,
                "Éste es un ejemplo\ndel uso de menús",
                "Acerca de", JOptionPane.PLAIN_MESSAGE );
		*/
		
		//InicializaMenus();
		
	}
	
	private void InicializaMenus() {

	     MenuBar mbarra = new MenuBar();

	     Menu m = new Menu( "Archivo" );

	     m.add( new MenuItem( "Nuevo") );

	     m.add( new MenuItem( "Abrir") );

	     m.add( new MenuItem( "Guardar") );

	     m.add( new MenuItem( "Guardar como") );

	     m.add( new MenuItem( "Imprimir") );

	     m.addSeparator();

	     m.add( new MenuItem( "Salir") );

	     mbarra.add( m );



	     m = new Menu( "Ayuda" );

	     m.add( new MenuItem( "Ayuda!" ) );

	     m.addSeparator();

	     m.add( new MenuItem( "Acerca de..." ) );

	     mbarra.add( m );



	     setMenuBar( mbarra );

	     }
	
	 private static PieDataset createDataset() {
		 
		 DefaultPieDataset result = new DefaultPieDataset();
		 try {
				// Una variable String para almacenar la sentencia SQL
				String query = "select b.nombre as nombre ,count(*) as total from ventasdetalle as a inner join productos as b on a.codigo = b.codigo  group by nombre order by total desc  limit 5";

				ResultSet resultado = comando.executeQuery(query);

				// Ejecutamos la consulta SQL
				while (resultado.next()) {
					result.setValue(resultado.getString("nombre"), resultado.getInt("total"));
				}

			} catch (SQLException e) {
				// Por si ocurre un error
				System.out.println(e.getMessage());
				int op = JOptionPane.showOptionDialog(null, e.getMessage(),
						"Entrada Invalidad", JOptionPane.YES_OPTION,
						JOptionPane.ERROR_MESSAGE, null,
						new Object[] { "ACEPTAR" }, "ACEPTAR");
			}
		 		  
		  return result;
		 
		 }
	 
	 private static JFreeChart createChart(PieDataset dataset, String title) {
		 
		  JFreeChart chart = ChartFactory.createPieChart3D(title, // chart title
		    dataset, // data
		    true, // include legend
		    true, false);
		 
		  PiePlot3D plot = (PiePlot3D) chart.getPlot();
		  plot.setStartAngle(290);
		  plot.setDirection(Rotation.CLOCKWISE);
		  plot.setForegroundAlpha(0.5f);
		  return chart;
		 
		 }
	 
	 private static void ponerGraficos()
	 {
		// Creamos el conjunto de datos con las votaciones
		  PieDataset dataset = createDataset();
		 
		  JFreeChart chart = createChart(dataset, "hola");
		  // Ponemos el gráfico en un panel
		  ChartPanel chartPanel = new ChartPanel(chart);
		  // Dejamos el tamaño por defecto
		  chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
		  // Lo añadimos a nuestra aplicación (PieChart)
		  //setContentPane(chartPanel);
		  pGrafica1.add(chartPanel);
	 }
	 
}
